iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Mobile Development

自己的 app 自己寫系列 第 4

[Day4] 十點多開始寫鐵人要寫到幾點才能完成

  • 分享至 

  • xImage
  •  

快死掉的第四天QQ

姑且先跳過講動畫的第二章,先繼續跟著 第三章 的文件繼續看,能夠切 tab/跳轉頁面其實應該已經能滿足最陽春的 app 需求了?

https://ithelp.ithome.com.tw/upload/images/20240918/20169412CqhHe05Pu2.jpg

沒力氣說廢話就整理點筆記吧。

  • View
    • 最外層的就是 TabView,是頁面最底下固定不動的 bar。看起來貌似無法直接修改背景色等某些樣式,要透過 UITabBar 來調整外觀
    • NavigationSplitView 用來實現跳轉,而且在 ipad 上和在 iphone 的呈現蠻不一樣的。在 iphone 上通常是一整頁,但 ipad 上是左上角會有一個按鈕,點擊後會出現類似側邊欄的東西
  • foreach 的寫法:ForEach(items) { item in --> 有點像 python 中的 for (i in array)
  • 拆包相關
    • force wrapping:可以用 ! 來做標示,告訴編譯器這個值一定存在,絕對不是 nil,因此請強行拆解出這個值,使用起來大概像 dictData[key]!,如果 unwrap 時失敗就會報錯
    • 與之相反的大概是 Optional,就是用 ? 來表示鍵值不一定存在
    • guard let ... else { ... } 則是另一種安全拆包的形式,如果中途觸發錯誤或 value = nil,則會觸發後續 else 的內容
    • 另外可以用 do ... catch ... 來處理錯誤,當中需要處理錯誤的加上 try,如果不加上 try 就不會拋出錯誤
  • Formatter:用來將數據轉換成特定格式
    • DateFormatter 解析日期和時間
    • NumberFormatter 處理數字
    • LengthFormatter 可以格式化長度數據
  • 共享變量的使用方式,可以不用管是傳遞到第幾層,只要有定義好就能用其實蠻方便的
// parent
struct LandmarkApp: App {
    @State private var modelData = ModelData()
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(modelData)   // 指定共享變量                
        }
    }
}    

// child view
struct CategoryHome: View {
    // 找出一個類型是 ModelData 的 instance,變數名為 modelData
    @Environment(ModelData.self) var modelData
    
    var body: some View {
        NavigationSplitView {
            List {
                modelData.features[0].image
                ...
            }
        }
    }
}

上一篇
[Day3] 學會寫 button 是不是離完成夢想前進了一大步
下一篇
[Day5] 總是逃避看文檔的我是混蛋嗎
系列文
自己的 app 自己寫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言